<head><meta charset='UTF-8'></head><h2>循环的嵌套</h2>


设想一样，如果我们要输出5个 *，用 for 循环可以这么写：
for i in range(0, 5):
    print('*')
 
如果想让这5个*在同一行，需要加上 end 参数，使得 print 之后不换行：
for i in range(0, 5):
    print('*', end=' ')
end 参数的作用是指定 print 结束之后的字符，默认是回车。你可以试试设置成不同字符的效果。
 
现在，如果我想要这样一个图形，怎么办？
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
 
当然，你可以循环5次，每次输出一行 “* * * * *” 。那如果再进一步，这样呢？
*
**
***
****
*****
 
除了你自己动手打好一个多行字符串外，也可以让程序帮我们解决这种问题，我们需要的是两个嵌套在一起的循环：
for i in range(0, 3):
    for j in range(0, 3):
        print(i, j)
 
第二个 for 循环在第一个 for 循环的内部，表示每一次外层的循环中，都要进行一整遍内层的循环。
print 里面用逗号分割，可以连续输出多个不同的值。
看一下输出的结果：
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
内层循环中的 print 语句一共被执行了 9 次。
i 从0到2循环了3次。对应于每一个 i 的值，j 又做了从0到2三次循环。所以3*3一共9次。
 
所以如果要输出一个5*5的方阵图案，我们可以
for i in range(0, 5):
    for j in range(0, 5):
        print('*', end=' ')
    print()
 
注意：第二个 print 的缩进和内层的 for 是一样的，这表明它是不是内层 for 循环中的语句，每次 i 的循环中，它只会在内循环执行完之后执行一次。
print 的括号里没有写任何东西，是起到换行的作用，这样，每输出5个*，就会换行。
 
要输出第二个三角图案时，我们需要根据当前外层循环的序数，设置内层循环应当执行的次数。
for i in range(0, 5):
    for j in range(0, i+1):
        print('*', end=' ')
    print()
 
内层的j每次从0到 i+1 进行循环。
这样，当第一次 i=0 时，j 就是 range(0,1)，只输出1个*。
而当最后一次 i=4 时，j 就是 range(0,5)，输出5个*。
 
#======== 扩展阅读 =========#
 
最后顺便说下，如果有同学用的是 PyCharm，或者其他第三方 IDE，可以通过 debug 中的 step 按钮，查看程序是怎样一行一行运行的。IDLE在这方面做得不太好，虽然也可以步进调试，但是很麻烦且不直观，所以就不推荐去用了。
想了解这种执行方式的，可以查看 如何在 Python 中使用断点调试

 

